libxl: Provide more formal libxl__ctx_lock and _unlock
authorIan Jackson <ian.jackson@eu.citrix.com>
Fri, 13 Jan 2012 16:54:27 +0000 (16:54 +0000)
committerIan Jackson <ian.jackson@eu.citrix.com>
Fri, 13 Jan 2012 16:54:27 +0000 (16:54 +0000)
Previously the only official interface for the ctx lock was the
CTX_LOCK and CTX_UNLOCK convenience macros, which assume and use "ctx"
from the surrounding scope.

Instead, provide libxl__ctx_lock and _unlock functions which can be
used by these convenience macros, and other callers who have
nonstandard requirements.

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
tools/libxl/libxl_internal.h

index 1b03929b2aefe381d5311e675aeea3b28ddd4c35..39e9e052fe3e9571f11ca31ac7f606f8cd7ff6ce 100644 (file)
@@ -115,7 +115,8 @@ struct libxl__ctx {
     struct xs_handle *xsh;
 
     pthread_mutex_t lock; /* protects data structures hanging off the ctx */
-      /* Always use CTX_LOCK and CTX_UNLOCK to manipulate this.
+      /* Always use libxl__ctx_lock and _unlock (or the convenience
+       * macors CTX_LOCK and CTX_UNLOCK) to manipulate this.
        *
        * You may acquire this mutex recursively if it is convenient to
        * do so.  You may not acquire this lock at the same time as any
@@ -753,16 +754,18 @@ libxl__device_model_version_running(libxl__gc *gc, uint32_t domid);
 
 /* Locking functions.  See comment for "lock" member of libxl__ctx. */
 
-#define CTX_LOCK do {                                   \
-        int mutex_r = pthread_mutex_lock(&CTX->lock);   \
-        assert(!mutex_r);                               \
-    } while(0)
+static inline void libxl__ctx_lock(libxl_ctx *ctx) {
+    int r = pthread_mutex_lock(&ctx->lock);
+    assert(!r);
+}
 
-#define CTX_UNLOCK do {                                 \
-        int mutex_r = pthread_mutex_unlock(&CTX->lock); \
-        assert(!mutex_r);                               \
-    } while(0)
-        
+static inline void libxl__ctx_unlock(libxl_ctx *ctx) {
+    int r = pthread_mutex_unlock(&ctx->lock);
+    assert(!r);
+}
+
+#define CTX_LOCK (libxl__ctx_lock(CTX))
+#define CTX_UNLOCK (libxl__ctx_unlock(CTX))
 
 
 /*